package tech.xs.auth.service;

import tech.xs.auth.api.domain.bo.password.CurrUserModifyPasswordBo;
import tech.xs.auth.domain.bo.password.ImageVerifyCodeBo;
import tech.xs.auth.domain.bo.password.InitPasswordBo;
import tech.xs.auth.domain.bo.password.PasswordCertificationBo;
import tech.xs.auth.domain.bo.password.PasswordLoginBo;
import tech.xs.common.auth.domain.cache.AuthTokenCache;

public interface AuthPasswordService {

    /**
     * 通过公开盐加密登陆密码
     * 将原始输入密码加密的到数据库最终保存的密码
     *
     * @param password 原始明文密码 示例: 123456
     * @return 加密后的密码
     */
    String publicEncryptedLoginPassword(String password);

    /**
     * 通过私有盐加密登陆密码
     * 将前端传递过来已经加密的密码进行二次加密得到最终数据库保存的密码
     *
     * @param password 前端经过md5加密后的密码
     * @return 将密码在服务端进行二次加密后得到保存到数据库的密码
     */
    String privateEncryptedLoginPassword(String password);

    /**
     * 解密登陆密码
     *
     * @param password 对前端rsa加密的代码进行解密
     * @return 得到前端md5加密后的代码
     */
    String decryptionLoginPassword(String password);

    /**
     * 获取登陆认证参数
     *
     * @return 认证证书
     */
    PasswordCertificationBo getCertification();

    /**
     * 获取登陆图形验证码
     */
    ImageVerifyCodeBo getImageVerifyCode();

    /**
     * 用户名登陆
     *
     * @param bo 登陆数据
     * @return 授权token
     */
    AuthTokenCache loginByUserName(PasswordLoginBo bo);

    /**
     * 初始化用户密码
     *
     * @param bo 请求数据
     */
    void initUserPassword(InitPasswordBo bo);

    /**
     * 重置用户密码为默认密码
     */
    void resetDefaultPassword(String userName);

    void currUserModifyPassword(CurrUserModifyPasswordBo bo);

}
